package util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

/**JWT验证器*/
public class Verifier {
    public static ResultTokenVo verifierJwt(String token){
        //创建一个HMAC256加密算法的对象，并设置了加密密钥CreateToken.TOKEN_SECRET。
        // 这个密钥是在创建JWT时使用的密钥，用于对JWT进行签名和加密。在验证JWT时，需要使用相同的密钥进行解密和验证。
        Algorithm algorithm = Algorithm.HMAC256(CreateToken.TOKEN_SECRET);
        String info="";
        //建了一个JWTVerifier对象，用于对JWT进行验证。
        // 它使用algorithm参数指定的加密算法和密钥进行验证，即只有使用相同的密钥和算法才能解密和验证JWT。
        JWTVerifier verifier = JWT.require(algorithm).build();
        ResultTokenVo vo=new ResultTokenVo();
        try {
            /**认证token */
            //用verifier对象对JWT进行验证，即解密并验证JWT的签名和过期时间等信息。
            // 如果JWT验证通过，那么会返回一个DecodedJWT对象，包含了JWT的所有信息，如签发者、过期时间、负载等。
            DecodedJWT jwt = verifier.verify(token);
            /**取token中的信息 */
            //从JWT中获取info字段的值，并转换为字符串类型。这个字段通常用于存储一些额外的信息，如用户信息、权限信息等。
            info=jwt.getClaim("info").asString();
            vo.setTag(1);//验证通过，设置tag值
            vo.setJson(info);//额外信息
        }catch (Exception e){
            vo.setTag(0);
        }
        //返回ResultTokenVo对象，可以根据ResultTokenVo对象的tag属性来判断JWT的验证结果
        return vo;
    }

//    public static void main(String[] args) {
//        String token=   CreateToken.getToken("{'name':'赵云'}");
//        System.out.println(token);
//        ResultTokenVo vo=    Verifier.verifierJwt("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODU3MjA1MzAsImluZm8iOiJ7J25hbWUnOifotbXkupEnfSJ9.YVjo6QF6mJZxqPs_YC7XRXweioSZOkNXHqFjVq0vnOM");
//        System.out.println(vo);
//    }
}
